<?php

namespace PHP;

/**
 * PHP 生命周期相关函数
 *
 * PHP 整个生命周期大致可以分成以下几个阶段,在PHP框架中分别由几个函数来表示:
 *
 * 模块初始化阶段 (module startup)
 * 请求初始化阶段 (request startup)
 * 执行脚本阶段 (execute script)
 * 请求关闭阶段 (request shutdown)
 * 模块关闭阶段 (module shutdown)
 * 
 */
class LifeCycleFunction
{

	/**
	 * 模块初始化阶段
	 *
	 * 主要进行 PHP框架 + Zend引擎的初始化操作.
	 *
	 * 此函数只在 SAPI 启动时执行一次
	 */
	public static function php_module_startup()
	{
		### 阶段1

		/*
		 * 激活 SAPI:
		 *
		 * 1. 初始化请求信息SG(request_info)
		 * 2. 读取设置POST请求的handler等
		 *
		 * 在module startup阶段处理完成后将调用 sapi_deactivate()
		 */
		sapi_activate();

		// 启动PHP输出
		php_output_startup();

		// 初始化垃圾回收器,分配 zend_gc_globals 内存
		gc_globals_ctor();

		// 启动 Zend 引擎
		zend_startup();

		### 阶段2
		
		/*
		 * 注册PHP核心ini配置及zend ini变量到EG(ini_directives)
		 * 
		 * 注册PHP定义的常量: PHP_VERSION, PHP_ZTS,PHP_SAPI 等等
		 * 
		 * 解析 php.ini: 解析完成后所有的 php.ini 配置存放在 configuration_hash 哈希表中
		 *
		 * 映射 PHP/Zend 核心的 php.ini 配置
		 * 根据解析出的 php.ini,获取对应的配置值,将最终的配置插入到 EG(ini_directives)哈希表
		 */ 
		REGISTER_INI_ENTRIES();
		zend_register_standard_ini_entries();

		### 阶段3

		// 注册 $_GET/$_POST/$_COOKIE/$_SERVER/$_ENV/$_REQUEST/$_FILES 变量的handler到CG(auto_globals)
		php_startup_auto_globals();

		### 阶段4
		
		// 注册静态编译的内部核心扩展: date,hash,libxml,ctype,filter,standard等
		php_register_internal_extensions();
		php_register_extensions();


	}

	/**
	 * 请求初始化阶段
	 */
	public static function php_request_startup(){}

	/**
	 * 执行脚本阶段
	 */
	public static function php_execute_script(){}

	/**
	 * 请求关闭阶段
	 */
	public static function php_request_shutdown(){}

	/**
	 * 模块关闭阶段
	 */
	public static function php_module_shutdown(){}

}